E) Template Generic Programming

#include <iostream>
template <typename T, unsigned int N>
class Array{
T data[N];
public:
Array(T (&arr)[N]){
for(int i=0; i<N; ++i){
data[i]=arr[i];
}
}
T* get_array(void){ return data; }
unsigned int size(void){ return N; };
void print_all(void){
for(int i=0; i<N; ++i){
std::cout<<data[i]<<", ";
}
std::cout<<std::endl;
}
};
int main(void){
int arr[3]={1, 2, 3};
Array<int, 3> arr_w(arr);
arr_w.print_all();
return 0;
}